1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
| function createStore(reducer, preloadedState, enhancer) { if (typeof preloadedState === "function" && typeof enhancer === "undefined") { enhancer = preloadedState; preloadedState = undefined; } if (enhancer) { return enhancer(createStore)(reducer, preloadedState); }
let currentReducer = reducer; let currentState = preloadedState; let currentListeners = []; let nextListeners = currentListeners; let isDispatching = false;
function ensureCanMutateNextListeners() { if (nextListeners === currentListeners) { nextListeners = currentListeners.slice(); } }
function getState() { return currentState; }
function subscribe(listener) { if (isDispatching) { throw new Error(); }
let isSubscribe = true; nextListeners.push(listener); return function unsubscribe() { if (!isSubscribe) { return; }
isSubscribe = false; const index = nextListeners.indexOf(listener); nextListeners.splice(index, 1); }; }
function dispatch() { if (isDispatching) { throw new Error("Reducers may not dispatch actions."); } try { isDispatching = true; currentState = currentReducer(currentState, action); } finally { isDispatching = false; }
const listeners = (currentListeners = nextListeners); for (let i = 0; i < listeners.length; i++) { const listener = listeners[i]; listener(); } return action; }
function replaceReducer(nextReducer) { currentReducer = nextReducer; dispatch({ type: ActionTypes.REPLACE }); return store; }
dispatch({ type: ActionTypes.INIT });
function observable() { }
return { dispatch, subscribe, getState, replaceReducer, [$$observable]: observable, }; }
|